package kernel;

import java.util.ArrayList;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import uiTip.UiTip;

/**
 * 已打开文件表
 */
public class OpenedFile
{
	private ArrayList<Oftle> fileList;//用ArrayList<Oftle>比用Oftle[5]不好的地方在于无法自动限制数组里的Oftle对象的个数
	private ObservableList<Oftle> openedFilesTable;//这个是界面的表格的，增加删除fileList里的内容时，也要对应修改这个
	public OpenedFile()
	{
		fileList =new ArrayList<Oftle>(5);
		openedFilesTable = FXCollections.observableArrayList(new ArrayList<Oftle>());
	}

	// 给定一个文件的起始块号，查看该文件是否在打开文件的列表中。在就返回它在列表中的下标，不在返回-1。 //也可以给路径名来看文件是否在列表中
	public int searchOpenedFile(int index)
	{
		for (int i = 0; i <fileList.size(); i++)
		{
			if (fileList.get(i).getNumber() == index)
			{
				return i;
			}
		}
		return -1;
	}

	// 添加新的文件打开列表信息(打开文件）
	public void addOftle(String name, byte attribute, int number, int length, int flag)
	{
		// 若文件列表已满
		if (fileList.size() >= 5)
		{
			UiTip.tip("文件列表已满，打开文件失败");
			return;
		}else {
			fileList.add(new Oftle(name,  attribute,  number, length, flag));
			openedFilesTable.add(new Oftle(name,  attribute,  number, length, flag));
		}
	}

	// 从文件打开列表中删除信息(关闭文件)
	public void subOftle(int n)
	{
		fileList.remove(n);
		openedFilesTable.remove(n);
	}

	// 修改文件指针
	public void changePointer(int n, int dnum, int bnum)
	{
		if (fileList.get(n).getFlag() == 0)
		{
			fileList.get(n).setRead(new Pointer(dnum, bnum));
		} else
		{
			fileList.get(n).setWrite(new Pointer(dnum, bnum));
		}
	}

	// 获取文件信息
	public Oftle getOftle(int n)
	{
		return fileList.get(n);
	}

	// 获取文件数
	public int getLength()
	{
		return fileList.size();
	}

	public ArrayList<Oftle> getFileList()
	{
		return fileList;
	}

	public void setFileList(ArrayList<Oftle> fileList)
	{
		this.fileList = fileList;
	}

	public ObservableList<Oftle> getOpenedFilesTable()
	{
		return openedFilesTable;
	}

	public void setOpenedFilesTable(ObservableList<Oftle> openedFilesTable)
	{
		this.openedFilesTable = openedFilesTable;
	}
	
}